package com.tangruojie.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    /**
     * 在SQL语句中添加操作需要使用拦截器
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        /**
         * 分页插件
         */
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        /**
         * 乐观锁插件
         * MyBatis-Plus 中的乐观锁（Optimistic Locker）是通过 @Version 注解实现的，它用来解决多线程并发修改同一条数据时的数据一致性问题。
         * 乐观锁在 update 时通过判断数据库中当前记录的 version 值是否与提交时一致来确保数据未被别人改动，只有一致才允许更新。
         * MySQL 在执行 UPDATE 语句时确实会根据 WHERE 条件进行比对判断，只有满足条件的记录才会被更新。（写回时判断条件）
         * 在 MyBatis-Plus 中，只有实体类对象中的 @Version 字段有值，且该值会被带入 SQL 的 WHERE 条件中，才能触发乐观锁机制。
         */
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

}
